package ar.edu.unrn.lia.crono;

import javax.inject.Inject;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import ar.edu.unrn.lia.service.AlquilerCuotaService;
import ar.edu.unrn.lia.service.AlquilerService;
import ar.edu.unrn.lia.service.ContableService;
import ar.edu.unrn.lia.service.exception.BusinessException;

@Service
public class Alerta {

	
	final static String CRONO_VENCIMIENTO_CONTRATO = "0 10 16 ? * *";
	final static String CRONO_CUOTA_ALQUILER_VENCIDA = "0 47 14 10 * ?";

	@Inject
	AlquilerService alquilerService;

	@Inject
	AlquilerCuotaService alquilerCuotaService;

	@Inject
	ContableService contableService;

	public ContableService getContableService() {
		return contableService;
	}

	public void setContableService(ContableService contableService) {
		this.contableService = contableService;
	}

	public AlquilerCuotaService getAlquilerCuotaService() {
		return alquilerCuotaService;
	}

	public void setAlquilerCuotaService(
			AlquilerCuotaService alquilerCuotaService) {
		this.alquilerCuotaService = alquilerCuotaService;
	}

	public AlquilerService getAlquilerService() {
		return alquilerService;
	}

	public void setAlquilerService(AlquilerService alquilerService) {
		this.alquilerService = alquilerService;
	}

	// TODO Como se Configura
	// http://quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
	// Todos los dias a las 16:10 (Todos los dias)
	@Scheduled(cron = CRONO_VENCIMIENTO_CONTRATO)
	public void alertaVencimientoContrato() {
		try {
			getAlquilerService().alquileresPorVencer();
		} catch (Exception e) {
			// TODO enviar Email al administrador por fallo
			e.printStackTrace();
		}
	}

	// TODO esta tarea se tendria que poder ejecutar desde una botinera
	// TODO Todos los dias 10 a las 14:47 (1 mes por mes)
	//TODO cambiar@Scheduled(cron = CRONO_CUOTA_ALQUILER_VENCIDA)
	//@Scheduled(fixedDelay = 30000)
	@Scheduled(cron = CRONO_CUOTA_ALQUILER_VENCIDA)
	public void cambiarEstadoCuotaPendienteAVencida() {
		try {
			getContableService().cambiarEstadoCuotaVencida();
		} catch (BusinessException e) {
			// TODO enviar Email al administrador por fallo
			e.printStackTrace();
		}
	}
}
